/**
 * Create in 2012-4-25.
 */
package kit4j.util.lang;

/**
 * 日历工具类。<br />
 * 该类包含日期时间数据操作中常用的工具方法。如判断指定年份是否为闰年；返回指定年份或月份的天数等。
 * 
 * @author MiniKnife
 * 
 */
public abstract class CalendarUtil {

	/**
	 * 判断指定的年份是否为闰年。
	 * 
	 * @param year
	 *            要判断的年份
	 * @return 如果指定的年份是闰年，返回true，否则返回false。
	 */
	public static boolean isLeapYear(int year) {
		return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
	}

	/**
	 * 返回指定年份包括的天数。
	 * 
	 * @param year
	 *            年份
	 * @return 如果指定的年份是闰年，返回366，平年则返回365。
	 */
	public static int getDaysOfYear(int year) {
		if (isLeapYear(year)) {
			return 366;
		} else {
			return 365;
		}
	}

	/**
	 * 返回指定年份与月份当月包括的天数。
	 * 
	 * @param year
	 *            年份
	 * @param month
	 *            月份
	 * @return 指定月份的天数。
	 */
	public static int getDaysOfMonth(int year, int month) {
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		case 2:
			if (isLeapYear(year)) {
				return 29;
			} else {
				return 28;
			}
		default:
			throw new IllegalArgumentException("month: " + month);
		}
	}
}
